home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
T-TPUG Old Monthly Disks
/
(c)tu.d64
/
ponzo tutor-5.c
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
17KB
|
403 lines
0 REM" PONZO*83*WATERLOO
1 [143]"
10 POKE53281,15:POKE53280,12:PRINT"[144]"
11 PRINT"[147] C64 TUTOR-5
12 [153]"ORTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTAN^"
13 [153]"(null) THE ADC'S OF 6510 MACHINE LANGUAGE WAIT (null)":MS$[178]" WELCOME! "
14 [153]"/TANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANEXPSTOP"
30 [141]60000:[141]63100:[141]63000
31 [153]"LOADTHE MWAITICROPWAITROCESSOR UWAITNIT (MPU)"
32 [153]"IN THE C64 IS THE 6510WAIT."
33 [153]"HE (SHE?) WILL OBEY YOUR COMMANDS"
34 [153]"IF YOU CAN SPEAK THE RIGHT LANGUAGE"
35 [153]"...AND THAT'S MACHINE LANGUAGEWAIT."
36 [153]"WE'LL LEARN SOME MACHINE LANGUAGE"
37 [153]"IN THIS TUTORIAL."
38 [153]"BUT LET'S LET THE 6510WAIT TELL IT..."
39 [141]63000
40 [153]"LOADSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(THE 6510WAITSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC("
45 [153]"(null)WE'VE GOT A NUMBER OF INTERNAL"
50 [153]"'REGISTERS' WHICH HOLD 8-BIT BINARY"
60 [153]"NUMBERS(BYTES) FROM $00 TO $FF (IN HEX)."
65 [153]"(null)WE CALL THEM 'A' AND 'X' AND 'Y'."
66 [153]"(WE HAVE A FEW MORE..BUT WAIT..)"
70 [153]"(null)YOU MAY LOAD THEM WITH NUMBERS"
80 [153]"AND PERFORM ADDITION,SUBTRACTION,"
90 [153]"TESTS FOR ZERO , > , < ETC.ETC."
100 [153]"(null)LET'S GO THROUGH SOME OF THESE 6510WAIT"
110 [153]"COMMANDS...":[141]63000
120 [153]"LOAD"A$X$Y$
130 [153]SD$"HERE ARE A FEW OF THE COMMANDS"
140 [153]"IN MY REPERTOIRE:"
150 [141]63200
160 [153]"LDA #$F3"
170 [153]"LWAITOADWAIT THE AWAITCCUMULATOR WITH THE"
180 [153]"NUMBER F3 IN HEX..#$F3"
190 [153]"THIS IS AN IMMEDIATEWAIT LOAD."
200 MS$[178]" A=#$F3 ":[141]63300:N$[178]"11110011":[141]40110:[141]63200
210 [153]"LDX #$AB":MS$[178]" X=#$AB ":[141]63300
215 N$[178]"10101011":[141]40130:[141]63200
220 [153]"LDY #$DD":MS$[178]" Y=#$DD ":[141]63300:N$[178]"11011101":[141]40140
230 [141]63200:[153]"TAX":[153]"TWAITRANSFER CONTENTS OF AWAIT TO XWAIT."
235 MS$[178]" X=A ":[141]63300:[141]41130:[141]63200
240 [153]"TYA":[153]"TWAITRANSFER CONTENTS OF YWAIT TO AWAIT.":MS$[178]" A=Y "
245 [141]63300:[141]41410:[141]63200
250 [153]"..AND THERE'S TXAWAIT AND TAYWAIT."
270 [153]"HERE ARE SOME MOREWAIT:":[141]63200
280 [153]"INXWAIT":[153]"INWAITCREMENT THE XWAIT-REGISTER BY 1.":MS$[178]" X=X+1 "
290 [141]63300:N$[178]"10101100":[141]40130:[141]63200
300 [153]"DEXWAIT":[153]"DEWAITCREMENT THE XWAIT-REGISTER BY 1.":MS$[178]" X=X-1 "
310 [141]63300:N$[178]"10101011":[141]40130:[141]63200
320 [153]"AND THERE'S INYWAIT AND DEYWAIT.":[141]63200
330 [153]M$:N$[178]"10110101":PP[178]0:[141]40160:[153]ML$"$1234":PP[178]20
340 [153]SD$"INC $1234WAIT":[153]"INCWAITREMENTS MEMORY LOCATION $1234"
350 MS$[178]" M=M+1 ":[141]63300:N$[178]"10110110":[141]40160:[141]63200
360 [153]"DEC $1234WAIT":[153]"DECWAITREMENTS MEMORY LOCATION $1234"
370 MS$[178]" M=M-1 ":[141]63300:N$[178]"10110101":[141]40160:[141]63200
380 [153]"ASLWAIT":[153]"AWAITRITHMETIC SWAITHIFT LWAITEFT"
390 [153]"ALL BITS OF THE AWAIT-REGISTER MOVE"
400 [153]"MOVE LEFT. A '0' COMES INTO THE 'LSB'"
410 [153]"AND THE 'MSB' DROPS INTO THE 'CARRY'."
420 [153]"(null)LSB=LEAST SIGNIFICANT BIT"
430 [153]"(null)MSB=MOST SIGNIFICANT BIT"
435 MS$[178]" A=2*A ":[141]63300
440 [153]C$:[151]C,49:N$[178]"10111010":PP[178]500:[141]40098:[141]63200:PP[178]20
450 [153]CC$:[151]C,32
460 [153]SD$"SECWAIT":[153]"SEWAITT THE CWAITARRY BIT."
470 [153]CR$:MS$[178]" CARRY=1 ":[141]63300:[151]C,49:[141]63200
480 [153]SD$"CLCWAIT":[153]"CLWAITEAR CWAITARRY BIT.":MS$[178]" CARRY=0 "
490 [141]63300:[153]CR$:[151]C,48:[141]63200:[153]CC$
500 [153]"STA $1234WAIT":[153]"STWAITORE THE AWAIT-REGISTER"
510 [153]"IN MEMORY LOCATION $1234":MS$[178]" M=A ":[141]63300
520 N$[178]"10111010":[141]41160:[141]63000
600 [153]"LOADTHAT'S ENOUGH. LET'S CLEAR THE SCREEN."
610 [153]"LDA #$20 _LOAD A WITH #$20='SPACE'."
620 [153]"STA $0400 RIGHT$":[153]"STA $0401 (null)_FILLS SCREEN"
630 [153]"STA $0402 (null)_MEMORY WITH #$20."
640 [153]"--- ----- .----------------":[153]"STA $07FF (null)_HENCE CLEAR SCREEN"
650 [153]"BUT WE CLEARLY NEED SOMETHING LIKE:":[153]"LDA #$20"
660 [153]"FOR X=0 TO #$3FF":[153]"STA $0400+X":[153]"NEXT X":[141]63000
670 [153]"LOADORCMDCMDFREFRE":[153]"BEGIN LDA #$20 _NOTE STATEMENT LABEL"
680 [153]" LDX #$00":[153]"LOOP STA $0400,X _INDEXED ADDRESSING"
690 [153]" ^ INX":[153]" (null) ?CHECK FOR X=#$3FF?"
695 [153]" /TAN IF NOT,GOTO 'LOOP'"
700 [153]"WE HAVE COMPAREWAIT & BRANCHWAIT INSTRUCTIONS!"
710 [153]"WHAT WE NEED ABOVE IS:":[153]"CWAITOMPWAITARE XWAIT TO #$3FF"
720 [153]"& BWAITRANCH IF NWAITOT EWAITQUAL..TO 'LOOP'":[141]63010
730 [153]"BEGIN LDA #$20 WAIT "
740 [153]" LDX #$00 ":[153]"LOOP STA $0400,X"
750 [153]" ^ INX ":[153]" (null) CPX #$3FF WAIT "
760 [153]" /TAN BNE LOOP WAIT ":[141]63200
770 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:WE WILL NEVER STAWAIT IN $07FFWAIT"
780 [153]"IN THE ABOVE PROGRAM...SO...":[141]63010
790 [153]" (null) CPX #$400 ":[141]63200
800 [153]"ALSO, WE CAN CPX #$NWAIT ONLY IF N LIES"
810 [153]"IN THE RANGE $00 TO $FF."
820 [153]"SO WE CHANGE THE CODE TO:":[141]63010
830 [153]"LOADBEGIN LDA #$20 WAIT"
840 [153]" LDX #$00 ":[153]"LOOP STA $0400,X"
850 [153]" STA $0500,X"
860 [153]" STA $0600,X"
870 [153]" STA $0700,X"
880 [153]" INX ":[153]" CPX #$FF WAIT"
890 [153]" BNE LOOP WAIT":[141]63000
900 [153]SD$"";:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$"";
910 [153]"OR, WE CAN SIMPLIFY THIS A LITTLE BY"
920 [153]"COUNTING DOWNWAIT FROM X=$FF TO $00":[141]63010
930 [153]"BEGIN LDA #$20 WAIT"
940 [153]" LDX #$FF ":[153]"LOOP STA $0400,X"
950 [153]" STA $0500,X"
960 [153]" STA $0600,X"
970 [153]" STA $0700,X"
980 [153]" DEX "
990 [153]" BNE LOOP WAIT":[153]" ":[141]63000
991 [153]SD$"";:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$"";
995 [153]"HOW CAN WE BNEWAIT WHEN WE DON'T DO ANY"
996 [153]"COMPAREWAIT?":[141]63000
1000 [153]"LOADYOU SEE, BNEWAIT REALLY CHECKS TO SEE"
1010 [153]"IF '0' IS THE RESULT OF AN ARITHMETIC"
1020 [153]"OPERATION..INCLUDING A COMPAREWAIT."
1030 [153]"IN THE PAIR OF INSTRUCTIONS:"
1040 [153]"CPX #$FF":[153]"BNE LOOP":[153]"WE SUBTRACT #$FF FROM THE"
1050 [153]"VALUE OF X AND BRANCHWAIT TO LOOP IF"
1060 [153]"THE RESULT IS NOT ZERO!":[141]63000
1070 [153]"LOADINX ":[153]"BNE LOOP"
1080 [153]"WE BRANCH TO LOOP IF THE RESULT OF"
1090 [153]"INCREMENTING X IS NOTWAIT ZERO.":[153]"FREFREFRE"
1100 [153]"DEC $1234":[153]"BNE LOOP "
1110 [153]"HERE WE BRANCH TO LOOP IF"
1120 [153]"DECREMENTING $1234 IS NOT ZERO.":[153]"FREFREFRE"
1130 [153]"NOTEWAIT: CPXWAIT INVOLVES A SUBTRACTION"
1140 [153]"(TO CHECK FOR ZERO RESULT)"
1150 [153]"BUT IT DOES NOTCMDCMDCMDFREFREFREON CHANGE ANY REGISTERS!":[141]63000
1160 [153]"LOADLET'S RVSWAIT THE SCREEN."
1170 [153]"THIS REQUIRES LOOKING AT EVERY SCREEN"
1180 [153]"MEMORY LOCATION AND CHECKING THE MSBWAIT."
1190 [153]"IF IT'S 1WAIT THEN CHANGE IT TO 0WAIT."
1200 [153]"IF IT'S 0WAIT THEN CHANGE IT TO 1WAIT."
1300 [153]"(THE MSB DETERMINES IF THE CHARACTER"
1310 [153]"IS IN RVS-FIELD)!"
1320 [153]"WE'LL:":[153]"LDA $0400,X":[153]"EOR #$80 WAIT __???":[153]"STA $0400,X"
1330 [153]"EORWAIT IS AN EWAITXCLUSIVE ORWAIT!":[141]63000
1340 [153]"LOADIF AWAIT CONTAINS 10110101WAIT (AFTER LDAWAIT)"
1350 [153]"THEN EOR #$80WAIT DOES AN EXCLUSIVE-OR"
1360 [153]"WITH 10000000WAIT ($80 IN HEX)"
1370 [153]"AND GIVES 00110101WAIT..VERY NICE!"
1380 [153]"OUR PROGRAM MIGHT GO:"
1390 [153]"BEGIN LDX #$FF ":[153]"LOOP LDA $0400,X"
1400 [153]" EOR #$80 ":[153]" STA $0400,X"
1410 [153]" LDA $0500,X":[153]" EOR #$80 "
1420 [153]" STA $0500,X":[153]"ETC. ETC..UNTIL..WAIT"
1430 [153]" STA $0700,X"
1440 [153]" DEX ":[153]" BNE LOOP ":[141]63000
1450 [153]"LOADIT'S CLEAR THAT THIS WILL NOT DO IF"
1460 [153]"WE WANT TO GO FROM $0400 TO $0500 TO"
1470 [153]"..TO $0N00,INSTEAD OF JUST TO $0700."
1480 [153]"WE NEED A LOOP-WITHIN-A-LOOP"
1490 [153]"FOR LARGE N...SOMETHING LIKE:"
1500 [153]" M=$0400":[153]" X=N _N INSTEAD OF 3"
1510 [153]"LP1 Y=#$FF":[153]"LP2 LDA M+Y":[153]" EOR #$80"
1511 [153]" STA M+Y":[153]" Y=Y-1"
1512 [153]" IF Y<>0 GOTO LP2 ":[153]" M=M+$100":[153]" X=X-1"
1513 [153]" IFX<>0 GOTO LP1 ":[141]63000
1514 [153]""[163]23)"_WON'T DO Y=0WAIT!"
1515 [153]""[163]23)"_WON'T DO X=0WAIT!!":[141]63000
1516 [153]"";:[129]I[178]1[164]10:[153]CL$:[130]:[153]"WE'LL CHANGEWAIT IT TO:"
1517 [141]63010:[153]" M=$0400":[153]" X=N" "
1518 PRINT"LP1 Y=#$00 ":PRINT"LP2 LDA M+Y":PRINT" EOR #$80"
1519 PRINT" STA M+Y":PRINT" Y=Y-1"
1520 PRINT" IF Y<>0 GOTO LP2 ":PRINT" M=M+$100":PRINT" X=X-1"
1521 PRINT" IFX>=0 GOTO LP1 [146]":GOSUB63000:PRINT"";
1522 PRINT"WE WORK ON M+00 FIRST,THEN Y=Y-1[146]"
1523 PRINT"WILL CHANGE Y=00 TO Y=FF(!) AND WE'LL"
1524 PRINT"CONTINUE WITH M+FF THEN M+FE..TO M+01"
1525 PRINT"AND WE STOP THE Y-LOOP THERE!"
1526 PRINT"THE X-LOOP STARTS WITH X=N AND EACH"
1527 PRINT"X=X-1[146] CHANGES X TO N-1,N-2,..2,1,0 THEN[146]"
1528 PRINT"ONE MORE X=X-1[146] CHANGES X TO FF(!) WHICH"
1529 PRINT"IS NEGATIVE[146](!) AND WE STOP THE X-LOOP!"
1530 PRINT"NOTE[146]:THE 6510 REGISTERS CAN HOLD #'S"
1531 PRINT"FROM $00 TO $FF.IF WE HAVE 00[146] AND"
1532 PRINT"DECREMENT[146],IT CHANGES TO FF[146]..AND FF+1[146]=00[146]"
1533 PRINT"FINALLY,MSB=1[146] SIGNIFIES A NEGATIVE NO.[146]!";:GOSUB63000
1540 PRINT"[147]LET'S TRY SOMETHING LIKE:"
1550 PRINT"BEGIN LDA #$0400 [146]_??*!#$0400 TOO BIG!!"
1555 PRINT" STA $B0 [146]_$B0 NOW HAS #$0400"
1560 PRINT" LDX #$03 ":PRINT"LP1 LDY #$00 "
1570 PRINT"LP2 LDA ($B0),Y[146]_ INDIRECT INDEXED?":PRINT" EOR #$80 "
1580 PRINT" STA ($B0),Y[146]_ INDIRECT INDEXED!":PRINT" DEY "
1590 PRINT" BNE LP2 ":PRINT" INC $B0 BY #$100[146]_??*!!HOW??"
1600 PRINT" DEX ":PRINT" BPL LP1 [146]_BRANCH ON PLUS!!"
1610 PRINT"LDA ($B0),Y[146] TAKES THE CONTENTS OF"
1620 PRINT"MEMORY LOC'N $B0, ADDS Y, AND THIS[157][157][157][157][184][184][184][184]"
1625 PRINT"GIVES THE ADDRESS OF THE BYTE WHICH "
1626 PRINT"GETS LOADED INTO 'A'!!":GOSUB63000
1630 PRINT"[147]THERE ARE SOME NEW IDEAS..AND PROBLEMS!"
1635 PRINT"BUT FIRST LET'S AGREE THAT WE'LL"
1636 PRINT"USE $B0 TO REFER TO THE MEMORY LOC'N"
1637 PRINT"AND ($B0) TO REFER TO THE CONTENTS"
1638 PRINT"OF MEMORY LOCATION $B0."
1640 PRINT"LET'S LOOK AT ADDRESSING MODES[146]:":GOSUB63000
1650 PRINT"[147]BASIC"TAB(20)"ASSEMBLER"
1655 PRINT"[184][184][184][184][184]"TAB(20)"[184][184][184][184][184][184][184][184][184]"
1660 PRINT"A=5[146]"TAB(20)"LDA #$05[146]"
1670 PRINT"[209]IMMEDIATE MODE. THE ACCUMULATOR"
1680 PRINT"IS LOADED WITH THE # 5."
1690 PRINT"A=M(5)[146]"TAB(20)"LDA $05[146]"
1700 PRINT"[209]ABSOLUTE ADDRESSING. 'A' IS"
1710 PRINT"LOADED WITH THE CONTENTS OF"
1720 PRINT"MEMORY LOCATION 5."
1730 PRINT"A=M(5+X)[146]"TAB(20)"LDA $0005,X"
1740 PRINT"[209]ABSOLUTE INDEXED[146]. THE CONTENTS"
1750 PRINT"OF LOC'N (5+X) ARE LOADED INTO 'A'."
1760 PRINT"A=M(M(5+X))[146]"TAB(20)"LDA ($0005,X)"
1770 PRINT"[209]INDEXED INDIRECT[146]. THE CONTENTS"
1780 PRINT"OF LOC'N (5+X) GIVE THE ADDRESS OF"
1790 PRINT"THE BYTE TO BE LOADED INTO 'A'.":GOSUB63000
1800 PRINT"[147]THEN THERE'S OUR FRIEND:"
1810 PRINT"A=M(M(5)+Y)[146]"TAB(20)"LDA ($05),Y[146]"
1820 PRINT"[209]INDIRECT INDEXED[146]. FIRST, THE CONTENTS"
1830 PRINT"OF LOC'N 5 ARE EXTRACTED.THEN 'Y'"
1840 PRINT"IS ADDED AND THE RESULT GIVES THE"
1850 PRINT"ADDRESS OF THE BYTE LOADED INTO 'A'.":GOSUB63000
1860 PRINT"[147][209]INDIRECT[146] MEANS WE GO TO A MEMORY LOC'N"
1870 PRINT"TO GET THE ADDRESS OF THE BYTE TO BE"
1880 PRINT"LOADED INTO THE ACCUMULATOR."
1890 PRINT"[209]INDEXED[146] MEANS WE ADD THE CONTENTS"
1900 PRINT"OF A 6510[146] REGISTER TO AN ADDRESS."
1910 PRINT"[209]IF WE INDEX[146] THEN INDIRECT[146] IT'S"
1920 PRINT"INDEXED INDIRECT[146]..AS IN LDA ($0400,X)"
1930 PRINT"[209]IF WE INDIRECT[146] THEN INDEX[146] IT'S"
1940 PRINT"INDIRECT INDEXED[146]..AS IN LDA ($B0),Y":GOSUB63000
1950 MS$="CLEAR?!*$&":GOSUB63100:GOSUB63000
1960 PRINT"[147]LET'S EXPLAIN ABOUT MEMORY[146]."
1970 PRINT"6510[146] INSTRUCTIONS ARE STORED IN MEMORY"
1980 PRINT"AS 1- OR 2- OR 3- HEX BYTES."
1990 PRINT"INX[146]=E8[146] IS ONE BYTE LONG
2000 [153]"LDA #$05WAIT=AD 05WAIT IS TWO BYTES"
2010 [153]"LDA $1234,XWAIT=BD 34 12WAIT IS THREE BYTES."
2020 [153]" ^^ ^^"
2030 [153]"IN GENERAL, 2-BYTE ADDRESSES ARE"
2040 [153]"STORED IN MEMORY IN REVERSE ORDER:"
2050 [153]"LO-BYTEWAIT THEN HI-BYTEWAIT."
2060 [153]"SO IF YOU HAVE:"
2070 [153]"LDA ($B0),YWAIT=B1 CAWAIT THE 6510 WILL"
2080 [153]"GET FROM $B0 THE LO-BYTEWAIT OF THE"
2090 [153]"ADDRESS,AND FROM $B1 THE HI-BYTEWAIT!"
2100 [153]"(null)BE SURE TO PUT BOTH BYTES IN $B0/$B1"
2110 [153]"BEFORE LDA ($B0),YWAIT!!":[141]63000
2120 [153]"LOADLET'S GET BACK TO:"
2130 [153]"BEGIN LDA #$0400 WAIT_??*!#$0400 TOO BIG!!"
2140 [153]" STA $B0 WAIT_$B0 NOW HAS #$0400"
2150 [153]" LDX #$03 ":[153]"LP1 LDY #$00 "
2160 [153]"LP2 LDA ($B0),YWAIT_ INDIRECT INDEXED?":[153]" EOR #$80 "
2170 [153]" STA ($B0),YWAIT_ INDIRECT INDEXED!":[153]" DEY "
2180 [153]" BNE LP2 ":[153]" INC $B0 BY #$100WAIT_??*!!HOW??"
2190 [153]" DEX ":[153]" BPL LP1 WAIT_BRANCH ON PLUS!!"
2200 [153]"WE NOW MUST PUT $0400 INTO $B0/$B1"
2210 [153]"WITH LDA #$00WAIT STA $B0WAIT LDA #$04WAIT STA $B1WAIT."
2220 [153]"ALSO INC $B0 BY #$100WAIT IS CHANGED TO:"
2230 [153]"INC $B1WAIT... WE NEED ONLY INCWAIT THE"
2240 [153]"HI-BYTE BY '1'!":[141]63000
2250 [153]"LOADWE'LL CHANGE OUR PROGRAM TO:"
2260 [153]"BEGIN LDA #$00 WAIT":[153]" STA $B0 "
2270 [153]" LDA #$04 ":[153]" STA $B1 "
2280 [153]" LDX #$03 ":[153]"LP1 LDY #$00 "
2290 [153]"LP2 LDA ($B0),YWAIT":[153]" EOR #$80 "
2300 [153]" STA ($B0),YWAIT":[153]" DEY "
2310 [153]" BNE LP2 ":[153]" INC $B1 "
2320 [153]" DEX ":[153]" BPL LP1 WAIT":[141]63000
2330 [153]"WE NEEDN'T LDY #$00WAIT EACH"
2340 [153]"TIME WE BPL LP1":[153]"Y=0 ALREADY SO:":[141]63010
2350 [153]" ":[153]"LOOP":[153]"LOOP"
2355 [153]"LOOP":[141]63000
2360 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
2370 [153]"NOTE THAT LDX #$03WAIT CAN"
2380 [153]"BE CHANGED TO ANYTHING FROM"
2390 [153]"LDX #$01WAIT TO LDX #$80WAIT.":[141]63000
2400 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
2410 [153]"FOR LDX #$00WAIT WE'LL X-LOOP ONCE ANYWAY!"
2420 [153]"FOR LDX #$81WAIT,OR HIGHER,DEXWAIT"
2430 [153]"WILL LEAVE 'MSB'=1 IN THE X-REGISTER"
2440 [153]"AND X<0 WILL RESULT AND BPLWAIT WILL"
2450 [153]"NOTWAIT TAKE US BACK TO 'LOOP'!":[141]63000
2460 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
2470 [153]"NOTE THAT ($B1) WILL NOT"
2480 [153]"OVERFLOWWAIT AFTER A NUMBER OF INC $B1WAIT"
2490 [153]"INSTR'NS. AFTER ALL,MEMORY ONLY GOES"
2500 [153]"TO $FFFF, SO, UNLESS YOU GOOF"
2510 [153]"($B1)<=FF WILL ALWAYS BE TRUE!":[141]63000
2520 [153]"LOADNOTE THAT INCREMENTING THE ADDRESS"
2530 [153]"IN $B0/$B1 BY $0100 ONLY REQUIRES"
2540 [153]"INC $B1WAIT. IF YOU WANT TO INCREMENT"
2550 [153]"BY $0001 YOU CAN DO IT THIS WAY:"
2560 [153]" ------- "
2570 [153]" INC $B0 ":[153]" BNE NEXT":[153]" INC $B1 "
2580 [153]"NEXT ------- "
2590 [153]"THIS ADDS '1' TO ($B0).IF IT DOESN'T"
2600 [153]"OVERFLOWWAIT FROM FF TO 00 WE CONTINUE"
2610 [153]"WITH THE 'NEXT' INTRUCTION."
2620 [153]"IF IT DOES OVERFLOW TO 00WAIT"
2630 [153]"THE BNE NEXTWAIT WILL NOT TAKE US TO"
2640 [153]"'NEXT', AND WE ADD '1' TO THE HI-BYTE"
2650 [153]"WITH INC $B1WAIT.":[141]63000
2660 [153]"LOADIF YOU WANT TO INCREMENT BY OTHER THAN"
2670 [153]"$0001 OR $0100 (INC $B0WAIT OR INC $B1WAIT)"
2680 [153]"THEN YOU NEED TO ADDWAIT THE INCREMENT."
2685 [153]"SUPPOSE WE WANT TO ADD $1F:"
2690 [153]"LDA $B0 WAIT_GET LO-BYTE"
2700 [153]"ADC #$1FWAIT_ADD #$1F TO LO-BYTE"
2710 [153]"STA $B0 WAIT_PUT IT BACK"
2720 [153]"LDA $B1 WAIT_GET HI-BYTE"
2730 [153]"ADC #$00WAIT_ADD ZERO(?!)":[153]"STA $B1 WAIT_PUT IT BACK"
2740 [153]"YOU SEE..ADDING #$1F MIGHT JUST CAUSE"
2750 [153]"THE CONTENTS OF $B0 TO OVERFLOWWAIT WHICH"
2760 [153]"CAUSES CARRYWAIT=1. SO WE ADD THE CARRY"
2770 [153]"TO ($B1) WITH LDA $B1WAIT & ADC #$00"
2780 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:ADCWAIT MEANS ADWAITD WITH CWAITARRY.":[141]63000
2790 [153]"":[129]I[178]1[164]8:[153]CL$:[130]:[153]""
2800 [153]"OF COURSE THE CARRYWAIT MAY BE 1WAIT WHEN"
2810 [153]"THE ABOVE PIECE OF CODE STARTS, SO"
2820 [153]"WE MUST ALWAYSCMDCMDCMDCMDCMDCMDFREFREFREFREFREFREON CLCWAIT BEFORE AN ADCWAIT!":[141]63010
2830 [153]"CLC ":[141]63000
2840 [153]"LOADIF YOU WANT TO SUBTRACTWAIT #$1FWAIT YOU:"
2850 [153]"LDA $B0 ":[153]"SBC #$1FWAIT_SUBTRACT $1F":[153]"STA $B0 "
2860 [153]"LDA $B1 ":[153]"SBC #$00WAIT_SUBTRACT $00!!":[153]"STA $B1 "
2870 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:SBCWAIT MEANS SWAITUBWAITTRACT WITH CWAITARRY."
2880 [153]"HOWEVER, WITH SBCWAIT YOU MUST HAVE"
2890 [153]"CARRY=1 TO START WITH!!":MS$[178]"*?UGH!*?!!":[141]63000:[141]63100
2900 [141]63010:[153]"SEC ":[141]63000
3000 [153]"LOAD":MS$[178]"AU REVOIR!WAIT":[141]63100:[153]"":[128]
9999 [137]9999
40098 [151]A(0),32:[129]TT[178]1[164]PP:[130]:[129]I[178]0[164]6:[151]A(I[170]1),32
40099 [151]A(I),[197]([202](N$,I[170]1,1))[170]48:[129]TT[178]1[164]PP:[130]:[130]:[151]A(7),48:[142]
40110 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
40111 [151]A(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
40120 [129]I[178]0[164]7:[151]P(I),160:[129]TT[178]1[164]PP:[130]
40121 [151]P(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
40130 [129]I[178]0[164]7:[151]X(I),160:[129]TT[178]1[164]PP:[130]
40131 [151]X(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
40140 [129]I[178]0[164]7:[151]Y(I),160:[129]TT[178]1[164]PP:[130]
40141 [151]Y(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
40160 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
40161 [151]M(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
41120 [129]I[178]0[164]7:[151]P(I),160:[129]TT[178]1[164]PP:[130]
41121 [151]P(I),[194](A(I)):[130]:[142]
41130 [129]I[178]0[164]7:[151]X(I),160:[129]TT[178]1[164]PP:[130]
41131 [151]X(I),[194](A(I)):[130]:[142]
41140 [129]I[178]0[164]7:[151]Y(I),160:[129]TT[178]1[164]PP:[130]
41141 [151]Y(I),[194](A(I)):[130]:[142]
41160 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
41161 [151]M(I),[194](A(I)):[130]:[142]
41340 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
41341 [151]A(I),[194](X(I)):[130]:[142]
41360 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
41361 [151]M(I),[194](X(I)):[130]:[142]
41410 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
41411 [151]A(I),[194](Y(I)):[130]:[142]
41460 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
41461 [151]M(I),[194](Y(I)):[130]:[142]
60000 R$[178]"ORTAN=TAN=TAN=TAN=TAN=TAN=TAN=TAN^CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)"
60001 R$[178]R$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD/TAN>TAN>TAN>TAN>TAN>TAN>TAN>TANEXP"
60002 A$[178]" AWAITON"[170]R$:P$[178]"PWAITON"[170]R$
60003 X$[178]" XWAITON"[170]R$:Y$[178]"YWAITON"[170]R$
60004 M$[178]"MWAITON"[170]R$
60005 CR$[178]"ORTAN^CMDCMDCMD(null)(null)CMDCMDCMD/TANEXP"
60006 CC$[178]" AWAIT(null)CMDCMDCMD CMD CMD CMD CMD CMDCMDCMD CMDCMDCMD ON "
60007 WD[178]40:CRT[178]1024:[153][199](142)
60008 [129]I[178]0[164]7:A(I)[178]CRT[170]WD[170]3[170]2[172]I:P(I)[178]A(I)[170]20:X(I)[178]A(I)[170]3[172]WD:Y(I)[178]X(I)[170]20
60009 M(I)[178]Y(I)[170]3[172]WD:[130]:C[178]CRT[170]7[172]WD[170]1
60010 SD$[178]"":CL$[178]"":[129]I[178]1[164]WD[171]2:CL$[178]CL$[170]" ":[130]
60011 BT$[178]"":[129]I[178]1[164]24:BT$[178]BT$[170]"":[130]
60012 C$[178]CR$[170]"ORTAN<CMDCMDCMD(null)CMD(null)CMD(null)CMD(null)CMD-_CARRY BIT"
60019 ML$[178]""
60020 PP[178]20
60051 BT$[178]"":[129]I[178]1[164]24:BT$[178]BT$[170]"":[130]
60052 PT$[178]"ORTANTANTANTANTANTANTANTANTANTAN^CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD/=TANTANTANTANTANTANTANTAN=EXP"
60053 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDFN============THEN"
60054 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)(null)ONONONONCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD"
60055 PT$[178]BT$[170]"ONONONONONON"[170]PT$[170]"STOP"
60056 ML$[178]""
60057 WD[178]40:CRT[178]1024:[153][199](142)
60058 W2[178]WD[173]2:W3[178]WD[171]1:W1$[178][202]([196](WD),2):
60059 W2$[178][202]([196](W2),2):W3$[178][202]([196](W3),2)
60100 [142]
63000 [153]BT$CL$;
63001 [153]BT$"RETURNWAIT TO CONTINUE";
63002 [161]Z$:[139]Z$[179][177]""[167]63002
63003 [161]Z$:[139]Z$[178]""[167]63003
63004 [142]
63010 [153]BT$CL$;
63011 [153]BT$"SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(RETURN TO SEE IT HAPPENWAITSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(";
63012 [161]Z$:[139]Z$[179][177]""[167]63012
63013 [161]Z$:[139]Z$[178]""[167]63013
63014 [142]
63100 [129]T[178]1[164]5:[153]PT$MS$;
63101 [153]PT$" ";
63102 [153]PT$MS$;:[130]
63103 [142]
63200 [141]63000
63201 [153]SD$;:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$;:[142]
63300 [141]63100:[141]63010:[142]
63999 [141]60000:[153]"LOAD":[137]1630